import pytest
from playwright.sync_api import sync_playwright

"""
实现缓存cookie，只需要登录一次，后面的用例不用登录直接访问
适用场景：关闭浏览器后，cookie不会失效的网站
"""

# 创建一个 Fixture，用于启动 Chromium 浏览器
# 在所有测试用例的前置、后置执行，一般用于准备、关闭资源
@pytest.fixture(scope="function")
def chromium_browser():
    with sync_playwright() as p:
        # 设置以无头模式启动浏览器，停顿时间200毫秒
        browser = p.chromium.launch(headless=False, slow_mo=200)
        # 返回浏览器对象
        yield browser
        # 关闭浏览器
        browser.close()

# 登录用例
def test_login(chromium_browser) -> None:
    context = chromium_browser.new_context()
    page = context.new_page()
    print("test case 1: login")
    page.goto("http://127.0.0.1:34009/xxl-job-admin/toLogin")
    page.get_by_placeholder("请输入登录账号").click()
    page.get_by_placeholder("请输入登录账号").fill("admin")
    page.get_by_placeholder("请输入登录密码").click()
    page.get_by_placeholder("请输入登录密码").fill("123456")

    # 表示登录后让它走到下一个页面之后才继续操作
    with page.expect_navigation(url="**/xxl-job-admin/"):
        page.get_by_role("button", name="登录").click()

    # 保存cookie，注意auth目录不会自动创建，这是相对路径，是根据当前代码所在路径的下面创建
    context.storage_state(path="auth/state.json")

    context.close()


# 打开用户管理界面
def test_open_user_list(chromium_browser) -> None:
    # 在创建上下文时，加载cookie信息，这样就不会跳转到登录页面去
    context = chromium_browser.new_context(storage_state="auth/state.json")
    page = context.new_page()
    print("test case 2: open_user_list")
    page.goto("http://127.0.0.1:34009/xxl-job-admin/user")
    page.pause()

    context.close()